var app = getApp()
var times = 1
var co = require('common.js')

module.exports = {
   wxGetLocation: wxGetLocation,
   moveAndGetMapCenter: moveAndGetMapCenter,
   getLocationName: getLocationName,
   getMapCenterLocation: getMapCenterLocation,
   isTooClose: isTooClose,
   getMapCenterAddress: getMapCenterAddress
}

//获取用户位置
function wxGetLocation(callback) {
   wx.getLocation({
      type: 'gcj02', //'wgs84',
      success: function(res) {
         callback(res)
      },
      fail: function(res) {
         // console.log('【用户拒绝获取位置】fail:res', res)
         askLocationAuth(callback, res)
      },
   })
}

//询问定位权限
function askLocationAuth(callback, result) {
   co.confirm('检测到您没打开定位权限，是否去设置打开？',
      '取消', '确认', function (res) {
         if (res) {
            wx.openSetting({
               success: function (_res) {
                  //console.log('setting_res==', _res)
                  if (_res.authSetting['scope.userLocation']) {
                     wxGetLocation(callback)
                  } else {
                     callback(result)
                  }
               }
            })
         } else {
            callback(result)
         }
      })
}

//回到用户原点
function moveAndGetMapCenter(mapObj, callback) {
   mapObj.moveToLocation() //回到用户点
   setTimeout(function() {
      //console.log('【第 ' + times + ' 次等到获取地图中心坐标】')
      times++
      getMapCenterLocation(mapObj, callback)
   }, 500);
   // console.log('【回到设备当前位置，开始等待获取】')
}

//获取地图中心坐标(启动小程序时进入一次)
function getMapCenterLocation(mapObj, callback) {
   mapObj.getCenterLocation({ //获取地图中心坐标
      success: function(res) {
         //console.log('【启动获取地图中心坐标】res', res,'=app.aData.p==',app.Data.p)
         if (isTooClose(res, app.Data.p)) {
            callback(res)
         } else {
            moveAndGetMapCenter(mapObj, callback)
         }
      },
      fail: function(res) {
         console.log('【获取地图中心坐标失败】res', res)
      },
   })
}

//判断两个位置是否太近,或某个位置异常
function isTooClose(loc1, loc2) {
   //console.log('【测距：1经度，1纬度】', loc1.latitude + '，' + loc1.longitude)
   //console.log('【测距：2经度，2纬度】', loc2.latitude + '，' + loc2.longitude)
   // if (x_y_isTooSmall(loc1) || x_y_isTooSmall(loc2)) {
   //    return true
   // }
   var p = {
      latitude: Math.abs(loc1.latitude - loc2.latitude),
      longitude: Math.abs(loc1.longitude - loc2.longitude)
   }
   //console.log('【测距：经差，纬差】', p.latitude + '，' + p.longitude)
   if (x_y_isTooSmall(p)) {
      return true
   } else {
      return false
   }
}

//判经度值，纬度值是否太小于<0.0005
function x_y_isTooSmall(p) {
   if (p.latitude < 0.0005 && p.longitude < 0.0005) {
      return true
   } else {
      return false
   }
}

//获取地图中心坐标及地址(每次点击标记)
function getMapCenterAddress(mapObj, callback) {
   mapObj.getCenterLocation({ //获取地图中心坐标
      success: function(res) {
         // console.log('【获取地图中心坐标】res', res)
         callback(res)
      },
      fail: function(res) {
         console.log('【获取地图中心坐标失败】res', res)
      },
   })
}

//坐标转中文地址
function getLocationName(loc, callback) {
   //y6KGnZ0tnwKl5uYcGQl7NOAHirGAVr5h    //百度 key
   var QQMap = require('qqmap-wx-jssdk.js')
   var myMap = new QQMap({
      key: 'T7ABZ-RU4CP-K67D3-VHM6T-MAYFO-BFBU4'
   });
   // var myMap = new QQMap({ key: 'A62BZ-7M5CS-OIBOQ-6DCGT-YHMYT-PPF27' });
   myMap.reverseGeocoder({
      location: {
         latitude: loc.latitude,
         longitude: loc.longitude
      },
      success: function(res) {
         console.log('res=====',res)
         console.log(loc.latitude + '，' + loc.longitude + '==' + res.result.address)
         var address = res.result.address
         if (res.result.address_reference) {
            var ref = res.result.address_reference
            if (ref.landmark_l2) {
               if (ref.landmark_l2.title) {
                  address += ref.landmark_l2.title
                  var add = {
                     address: address,
                     title: ref.landmark_l2.title,
                     location:res
                  }
                  if(typeof(callback) == 'function'){
                     callback(add)
                  }
                  return
               }
            }
         }
         callback(address)
      },
      fail: function(res) {
         // console.log('【坐标转中文地址失败:res】', res)
         callback('')
      },
   });

}